CONTENTS About the Editor . About the Authors lntroduction IX Style Substance Ken A 川 0 旧 Award for the Silliest User lnterface: 0 〃 Ba 川わ c た Windows Search The Pitfalls ofOutsourcing Programmers M たわ 4 B 〃 Excel as a Database R00 B ル ℃ S 〇 C04 Talk A 川 Bos 曜ル Autistic Social Software Why Not 」 ust Block the AppsThat Ra ァ川 0 〃 d C 厖〃 Rely on Undocumented Behavior? 1 つ」っ 0 . 47 K C わビ〃 g Kicking the Llama 4 れ d 肪川 Chi Save Canada'slnternet 伝 om WIPO CO DO け oro 曜 EA: The Human Story 4 ー S 々 0 ″ S StrongTyping vs. Strong Testing B 川 E 黻 Processing Processing Pa Fo Great Hackers 4 司 G わ 4 川 The Location Field the New わ〃 G 川わ催 Command Line 1 っ 0 「 / 9- -5 -0 マ /
Vi CONTENTS G go Ho わ々ビ Ro れながお Eric / 0 わ 0 〃 Eric L ゆ々 e な M / 訪 / “ Ra 〃ホ” La なア〇 s 川 4 れ Starbucks Does Not Use Two-Phase Commlt Passion C + + —The Forgotten Tro 」 an Horse How Many Microsoft EmpIoyees Does ItTake to Change a Lightbulb? What to Do When You're Screwed Larry's Rules 0fS0ftware Engineering # 2 : MeasuringTesters byTest Metrics Doesn't M40 Po 々々市“た Team Compensation 尺たた S 訪 4 CIay S ん黻ァ C ア S ん黻ァ Eric S た E じ S た Eric S た Aaron S ル 4 て Mac Word 6.0 A Group lts Own Worst Enemy . Group as User: Flaming and the Design ofSocial S0ftware Closing the Gap, Part 1 Closing the Gap, Part 2 Hazards 0fHiring PowerPoint Remix ルル“好計 A Quick (and Hopefully Painless) Ride Through Ruby (with Cartoon Foxes) lndex . 1 1 9 . 1 25 . 1 29 . 135 . 139 1 51 . 1 57 . 293 . 267 . 261 . 247 . 233 . 223 . 21 1 . 183
INDEX ActionScript, 80 Adams, Douglas, 45 ADD (Asperger's syndrome, Attention Deficit Disorder), 38 ー 39 Agile Manifesto, 126 Agile programming, 158 , 160 amateur VS. professional programming, 67 , 135 Amazon, 10 , 32 , 123 , 244 Andreessen, Marc, 112 Apple Lisa, 89 articulated social net 、 vorks and computers, 40 Asperger's syndrome, Attention Deficit Disorder (ADD), 38 ー 39 Attention. XML, 32 Auer, Ken, 126 autrsm and computer interfaces and geek culture, 39 Avalon, 32 , 40 balanced scorecards, as employee evaluation tool, 166 Beck, Kent, 126 Berners-Lee, Tim, 23 ー 24 , 29 Bion, W.. R. , 186 , 187 bitching as commumcation, 147 BlackweIl, Trevor, 106 Bloglines, 32 blogreaders vs. InfoPath, 29 blogrolls, 4374 ト OOkS , controversial, 96 bozo filter (kill file), 214 Brand, Stewart, 186 Brooks, Fred, 97 browser compatibility, 111 ー 12 Brucker-Cohen, Jonah, 218 Bruckman, Amy, 37 Bumplist, 218 bureaucracy ln commercial software, 138 two-phase commit, 120 123 chronous transactlons, synchronous versus asyn- exception handling, 121 correlation identifier, 121 conversation, 123 and software design, 119 outsourcing model, 9 ー 10 strategy, 14 operational effectiveness and compensation, 157 ー 70 business
294 INDEX software preferences, 99 software sales, 223 ー 31 Butterfield, Stewart, 195 C, 129 ー 31 , 133 C + + , 129 ー 33 career planning related to employer, 147 ー 48 and teams, 160 civil discourse and RSS permalinks, 29 COde correctness, compiling and, 75 coderspeak, 269 Cognitive Style 0f PowerP0int, 262 , 264 Cohen, Geoff, 194 Columbia disaster PowerPoint slide link, 262 competltlon C vs. C + + , 130 Google Gmail, 114 IE vs. Netscape, 112 Microsoft Office, 148 in software product strategy, 237 web apps vs. desktop apps, 114 in workplace, 160 , 168 compiler C, C + + compatibility, 131 checked exceptions, 70 as correctness checker, 75 ー 77 essential programming tool, 143 for non-executable objects, 80 ー 81 perception compared tO human, 1 as programming style enforcement, 27 , 6 static type checking, 67 ー 68 commercial software, bureaucracy in, 138 communication, bitching as, 147 communication patterns, types Of, writing, 103 , 258 compile time type checking vs. runtime, 75 185 Communitree, early network group interaction example, 191 ー 92 company/job sucks, 147 ー 49 compensatlon balanced scorecards, 166 compensate based on span Of influence, 168 merit pay de-emphasis, 166 non-monetary motlvators, 169 profit sharing, 167 promotion system, 165 sales, 225 , 227 compiling and COde correctness, 75 complex VS. simple software design, 23 ー 24 computer-as-door software, 211 computers as SOCial mediators, 39 computer social models, simplistic simulations, 41 conference calling, problems encountered, 185 content as value, 31 continuous partial attention, 38
costs deployment 0f web apps vs. desktop apps, 116 0f programming style differences, 27 , 6 0f programming upgrades, 136 technology conversion, 115 Craigslist, 218 crunch time, 59 ー 61 , 63 ー 65 CSound programming language, Cunningham, Ward, 126 Curtis, Pavel, 193 customer servrce and outsourcing, 10 and sales, 225 and software design, 120 data converslon nightmares, 17 Deming, W. Edwards, 159 desktop applications vs. web based programming, 111 , 114 , 116 developers. 立ビ hiring developers development design vs. programming, 9 outsourcing model, 10 ー 11 and overtlme, 59 programmer productivity, Fred Brooks, 97 required tools, 143 role of innovation, 13 ー 14 tools, 143 verslon control and bug tracking, 143 web as the future, 112 ー 15 INDEX 295 DigitaI MiIIennium Copyright Act (DMCA), 53 ー 54 , 55 DMCA (Digital Millennium Copyright Act), 53 ー 54 , 55 documents, importance Of, 141 duck typing (structuraltyping), 71 duplo programming, 104 dynamic type checking, 67 , 68 ea—spouse, 59 ー 65 ease Of use factor, application interfaces, 113 ー 14 Electronic Arts, employee working hours policies, 59 ー 61 , 63 ー 65 Electronic Word, The, 91 elegant programming, 80 email, as multiple commumcatlon pattern software, 186 embrace, extend, extlnguish strategy of C + + , 129 ー 31 , 133 employees employee law, NOIO Press, 250 evaluation tOOl, balanced scorecards as, 166 impossible goals as employee demotivator, 161 ranking and competition, 160 management bitching as commumcation, 147 career planning, 147 company/job sucks, 147 development tools, 143 lmportance Of documents, 14172
296 INDEX importance 0f product/program managers, 144 product development schedule overruns, 145 reqmrement for verslon control and bug tracking tools, 143 state 0f being screwed, 141 team forward velocity, 149 engmeering manager, J0b characteristics, 140 ergonormcs, transltion tO, 183 Excel as a database avoidance tool, 17 experrence, learning from, 173 ー Experiences in Groups, 187 Extreme Programming, 126 Federalist Papers # 10 and 80 Slashdot moderation system, 217 federated identity, 40 Ferguson, Don, 24 firing, hiring vs. , 247 ー 48 flame wars, 212 , 213 flexibility, success due to, 41 Flickr, 195 FogBugz bug tracking software, 152 FORTRAN, use of whitespace, 5 Fowler, Martin, 70 , 126 Friedman, Daniel, 267 Friendster, 41 Fries, Ed, 175 Ftrain. C01れ future development plans, internal architecture, 90 85 lnternal software technologies, 82 future software as SOCial solutions, 43 games, shelf life, 49 gaming the system in performance measurement, 151 Gap, software sale gap, 223 , 233 Gates, Bill, 26 , 189 Gettysburg Address PowerPoint slide link, 264 role of core group, 201 patterns, 189 , 190 separate modes, 196 networking simultaneous inattention, 215 negatlve attentlon VS. learning from experience, 193 large vs. small groups, 195 horror of censorship, 216 Microsoft example, 189 enemies, Bill Gates and door culture, 216 groups, 193 constltutional criSIS ln online Bion's theories, 187 group lnteractlon group based software design, 184 search, 7 Google vs. Microsoft Windows interface, 114 Google Gmail, application demotivator, 161 goals, impossible, as employee Gillmor, Steve, 32
technological and SOCial issues coupled, 192 ubiquity of the web, 197 ー 98 GUI DESIGN, 51 GUI's, transition to, 183 Gyford, Phil, 196 Habitat, Lucasfilms online group, 193 hackers ability to concentrate, 108 clumping together, 104 corporate retreats and team- building exercises, 100 how to become one, 107 interesting work as motlvation, 98 Java programming, 95 , 98 tO kno 、 one you must be one, 102 and learning from work, 103 Microsoft understanding 0f, 100 and money, 97 and nasty little problems, 103 Office envrronment, 100 open source SOft 、 99 Perl programming, 101 programming language as a medium Of expression, 99 programming t001 preference, 95 Python programming, 95 , R&D department, 104 recognizing one, 106 t001 ChOice as motivatlon, 98 98 INDEX 297 VisuaI Basic programming, 95 what makes great one, 95 Hegel, J0hn, 209 Hidden Value, 169 hiring developers asking for code samples, 257 developers VS. programmers, 254 education level, 255 , 256 hire the best rule, pro's and con's, 252 hiring decision questions, 259 looking for someone better than yourself, 252 open source contributions, 258 role of women, 251 self-awareness, 253 hiring guidelines getting multiple opimons, 251 hiring after need is clear, 248 hiring vs. firing, 247 ー 48 knowing the law, 250 understanding that there are no certainties, 249 HTML software, 26 lacobucci, Dawn, 240 "if it's not tested, it's broken," 75 lmprov, 25 individual vs. group action, 187 InfoPath vs. blogreaders, 29 lnformation At Your Fingertips, 26 information overload, 32 lnform programming language, 80
298 INDEX interesting work as motlvation for great programmers, 98 , 101 interface design, 212 lnternet pseudonyms and psychological multiple personalities, 37 interoperability of C and C + + , 129 ー 31 , 133 intr1nSIC motlvatlon, role in programming performance, Joy, Bill, 198 job sucks, 147 ー 49 Java programming, 95 , 98 lto, Joi, 196 163 KotIer, PhiIip, 239 Kleiner, Art, 201 KISS principle, 24 kill file (bozo filter), 214 Kernighan, Brian, 267 Kaycee Nicole, 205 Kay, Alan, 107 Kawasaki, Guy, 171 Kaminski, Pete, 196 6 K&R C programming style, 27 , C/C + + , 129 ー 31 , 133 language compatibility and online group, 193 LambdaMOO, Xerox PARC labor practices, 59 ー 61 , 63 ー 65 Lanham, Richard, 91 latent type checking (structural typing), 71 Lawrence, 工 E. , 33 learning from experience, 173 ー 80 Lerman, Julia, 251 LiveJournal, group interactlon software example, 207 logical tradition vs. rhetorical tradition, 91 low-tech vs. high tech productivity, 96 lucky stiff, author (satire on what's important), 271 , 273 , 285 ー 86 Mac Word, 171 , 173 68K Classic Mac OS, 176 defining styles in, 180 feature parity with WordPerfect, 174 grammar checker technical problems, 176 how code swapping works, 178 and problems with Mac OS, 175 program thrashing, 179 Pyramid project, 174 version 5.0 , 173 virtual memory problems, 177 what Mac-Like means, 179 mailing lists, 212 management Of great programmers, 97 , 101 marketing department, why not developers, 17 marketing vs. sales, 225
Martin, Robert, 76 Mason, Chris, 175 Measure UP technique, 168 membership in groups, software consequences, 188 merit pay as moral crusher, 159 Microsoft internal decision making, 172 ] uvenile criticism 0f, 135 programmers crlticized unfairly, requirement, 54 ー 55 , 57 Notice and Takedown, ISP N010 Press, 250 network flaming, 214 Netscape, 112 netiquette, 214 Nelson, Graham, 80 199 natural and supernatural grace, Brooks, 97 Mythical Man Month, Fred software, 41 multi-use social simulation lnternet, 36 , 37 multiple personalities and the MP3 trading, 54 programmers, 97 motlvation for great Morris, Robert, 103 , 106 money, programmers and, 97 mobile phone content as value Microsoft Windows search, 7 motivation, 100 understanding 0f hacker 135 , 31 INDEX 299 Nucor SteeI employee compensation, 167 0 offshoring. See outsourcmg online persona, malntalmng single, 37 O'ReiIIy, CharIes, 169 organizational COSt Of programming upgrades, 136 outsourcmg design VS. manufacturing ln software development, 9 false predictions, 9 future Of SOft 、 outsourclng companies, 15 lack Of management control, 9 lOSt Of innovatlon and creativity, 11 no value added, 9 operational effectiveness VS. strategy, 11 recent history for software outsourcing, 10 software design vs. assembly, 13 successful chocolate bOX example, 12 overtlme work in programmmg, 59 ー 61 paradox of groups, 188 passion in programming, 126 ー 27 pay for performance compensation, 159 Pepys weblog, 196
300 INDEX performance measurement, 157 performance ranking team development, 158 Perl programming, 101 permalinks, 29 Peters, Chris, 174 Pfeffer, Jeffrey, 169 PHP, 27 Pilgrim, Mark, 114 Plato BBS system, 185 pornt-to-pomt two-way 151 , commumcation, pre-lnternet, 185 political influences in software success, 171 ー 72 PowerPoint, why it's bad, 262 , 264 Probst, Larry, 65 Processing programmmg language, 79 ー 81 product development schedule overruns, 145 product/program managers, 144 professional VS. amateur programming, 135 programmers lnteresting 、 as motlvation for, 98 , 101 management 0f, 97 , 101 and money, 97 productivity 0f, 97 vs. real world in pictures, 17 values Of as basis for software, 40 programmmg precisron vs. flexibility, 27 programming language as medium Of expression, 99 programming language b00k trends, 267 programming style as required language syntax, 27 , 6 punctuation in, 269 ー 70 programs as aesthetic obJects, 80 Python executable pseudocode, 73 and great programming, 95 , 98 syntax, 72 use Of whitespace, 1 quality costs, getting programming right, 137 Raikes, Jeff, 174 ranking, 0f employees, 159 RDF, 27 reading programming code aloud for understanding, 269 ー 70 Representational State Transfer (REST), 86 ー 87 reqmrement for versron control and bug tracking tools, 143 responsive software sales success factors, 234 customer commumty support, 242 customer product awareness, 235 demo availability, 240 making web buying easy, 243
product cost, 238 product need, 237 technical support, 241 REST (Representational state Transfer), 86 ー 87 INDEX 301 syntax and punctuation, 269 ー 70 variables, 274 RuntimeException, 70 runtime vs. compile time type revolution in social software, 194 checking, 75 rhetorical tradition vs. logical tradition, 91 Ries, AI, 240 Ritchie, Dennis, 267 RSS, 27 Ruby arrays, 282 block arguments, 281 blocks, 280 class methods, 278 class variables, 280 computer language or coderspeak, 269 constants, 276 data types, 275 , 276 discusslon Of code examples, 286 ー 87 , 289 do/end blocks, 281 global variables, 279 hashes, 283 instance variables, 279 keywords, 285 method arguments, 278 method chaining, 278 methods, 277 operators, 284 parts 0f speech, 273 pipe character block argument delimiter, 281 ranges, 282 regular expressions, 284 salesmen character traits, 228 compensation effects, 226 defining characteristic, 225 description, 224 management of, 227 , 228 skill set, 226 and れ a11 software vendors 230 sales Of software. ビど SOft 、 sales SCience fiction, software in, 36 Scrum Master, 158 search Microsoft vs. G00g1 ら 8 simple vs. complex design, 26 Semantic Web, 87 ー 88 Senate Bill 88 , 64 Seven Pillars of Wisdom, 33 SHOE (Simple HTML ontology Extensions), 87 Sifry, Dave, 29 , 32 SimCity, Windows compatibility, 47 Simple HTML Ontology Extensions (SHOE), 87 simple VS. complex software design, 23 ー 24
302 INDEX SIashdot moderation system, 217 Snider, Ken, 55 Snowbird meeting, 126 SOAP, WSDL as formalized programming models, 28 SOCial mediators, computers as, 39 social software, 36 broadcast pattern, 186 compared with desktop software, 211 definition, 185 design goals, 204 ー 7 earliest examples, 185 experimentation, 220 flaming, characteristic Of mailing lists, 212 group interface requrrements, 212 mailing list as initial example, 212 netiquette, 214 normal expenence iS failure, 200 possible developments, 219 three rules for development, 200 ー 202 user mental model, 213 value 0f group oriented design, 220 weblogs, 216 wikis, 216 social stickiness, 188 sociology and anthropology in group based software design, 184 SOft 、 abstraction VS. programmer productivity, 69 SOft 、 design and business, 119 conversation, 123 correlation identifier, 121 exception handling, 121 synchronous versus asyn- chronous transactlons, 123 two-phase commit, 120 for isolated users, 213 software future, Slashdot or Longhorn, 32 software ports and the Apple faithful, 171 SOft 、 sales advertising, 235 closing sales gap, 224 , 233 definition of selling process, 223 demo SOft 、 required features, 241 developing competitively, 237 marcomm, marketing commumcatlons, 235 marketing book recommendations, 239 positioning, 237 proactlve sales VS. responslve sales, 234 problems, 229 , 230 public development, 236 , 238 reasons Why software doesn't sell, 224 responslve sales advantages, 234 sales VS. customer service, 225 tradeshows, 236
、 store success factors, 24374 why product improvement vs. , 231 sound, revealed through CSound language, 81 span Of influence measurement, 168 spreadsheet as software example, 25 sprezzatura (art Of making it 100k easy), 91 Stallman, Richard, 107 Starbucks and two-phase commit, 120 ー 21 , 123 static vs. dynamic type checking Java, 70 overview, 67 , 69 Perl, 69 Python, 69 Stone, Sandy, 37 strong testing, 76 strong typing for compiler business policy checking, structuraltyping (latent type checking), 71 style wars, 2 ー 4 , 6 suboptimizatlon as employee demotivator, 162 success due t0 flexibility, 41 Swing, 32 syntax and style rules, 27 , 6 68 team forward velocity, 149 teamwork vs. employee ranking, 160 technical writing, 267 INDEX 303 technologicalleverage and productivity, 97 technology for needs 0f people, 35 ways t0 make work for people, 44 tester performance measurement example 0f bogus bug, 154 metrics don't work, 151 number Of bugs metric doesn't work, 153 number Of bugs reported metric, 153 ー 55 performance measurement VS. evaluation, 155 testing for cost of style, 5 ー 6 TeX programming language, 83 Thomas Edisons in society, 96 t00 ー choice as motivation for great programmers, 98 tOOls as a social choice, 98 Torvalds, Linus, 107 tragedy 0f the commons, 29 , 215 ー 16 Trojan Horse technology, C + + as, 129 ー 31 , 133 Trout, Jack, 240 Tufte, Edward R. , 262 , 264 Turing Game, 37 TurkIe, Sherry, 37 two-phase commit and customer service, 119 type casting and checking Java example, 71 Python example, 72 Python extended example, 74 type checking in Smalltalk and VBA, 67
304 INDEX 213 , 216 ー 17 weblogs, 92 , 116 , 186 , 195 ー 96 , 113 web interface in development, standard, 111 web based programming, future 116 future Microsoft competition, vs. desktop apps, 114 web apps Web, 32 wealth and productivity, 96 VisuaI Basic programming, 95 105 venture capital firms and hacking, VBScript ActiveX controls, 136 significance, 96 variation in wealth, actual Variant data type, 68 Usenet, 199 usability, 183 line, 114 URL location as new command upgrading, Windows, 48 testing, 75 ー 76 umt testlng VS. compile or runtlme unfairness ln compensation, 161 Udell, Jon, 26 in group interaction, 197 ー 98 ubiquity of the web, driving force web logs, as multiple C01 れ 1 umcatlon pattern software, 186 web publishing language need, 82 websites vs. books, production speed and complexity, 83 elegant, 84 , 86 as forms, 89 motivation for producing, 83 removmg semantic boundaries, 90 web technology, current, compared to IBM PC Jr. , 89 Weinberger, David, 196 WELL, The, 186 whitespace, 4 ー 5 Wiki description and examples, 196 ー 98 as social software, 216 ー 17 Wikipedia, example of power of core group, 203 Win32 API Microsoft strategic advantage, 115 ー 16 and VBScript, 136 windowing, hOW it was next big thing, 89 Windows and the MAC, 171 ー 72 search interface, 7 upgrade application compatibility, 47 ー 50 vs. web based programming, 111 ー 13 Win32 API, 115 ー 16
INDEX 305 Windows AppIication Verifier, 49 Windows Compatibility Administrator utility, 48 WinFS, 8 WIPO lnternet Treaties, 55 ー 57 Word. 立ビ Mac Word XML, 26 , 27
The Best Software Writing I: Selected and lntroduced by JoeI SpoIsky Copyright ◎ 2005 Edited by Joel Spolsky All rights reserved. No part of this work may be reproduced or transmitted ⅲ any form or by any means, electromc or mechanical, includmg photocopymg, recorchng, or by any lnformatron storage or retrieval system, 、 vithout the prior ・ written permission Of the copynght 0 、 vner and the publisher. ISBN-13 (paperback): 978-1-59059-500-8 ISBN-13 (electronic): 978-1-4302-0038-3 Printed and bound in the United States of America 9 8 7 6 Trademarked names may appear ⅲ this book. Rather than use a trademark symbol with every occurrence Of a trademarked name, we use the names 0 司 y ⅲ an editorial fashion and tO the benefit of the trademark owner, with no intention of rnfringement of the trademark. Lead Editor: Gary Cornell Editorial Board: Steve Anglin, Dan Appleman, Ewan Buckingham, Gary CorneIl, Tony DaVIS, Jason Gilmore, Jonathan Hassell, Chris Mills, Dominic Shakeshaft, Jim Sumser Assistant Publisher: Grace Wong Project Manager: Beth Christmas Copy Edit Manager: Nicole LeClerc Copy Editor: Liz Welch Production Manager: Kari Brooks-Copony Production Editor: Kelly Winqmst Compositor: Dina Quan Proofreader: Nancy Sixsmith lndexer: Broccoli lnformation Management Cover Designer: Kurt Krames Manufacturing Manager: Tom Debolski Licensing: T1na Nielsen Distributed to the book trade ⅲ the United States by Springer-VerIag New York, lnc. , 233 Spring Street, 6th 日 00 New York, NY 10013 , and outside the United States by Springer-Verlag GmbH & Co. KG, T1ergartenstr.. 17 , 69112 Heidelberg, Germany. ln the United States: phone I-800-SPRINGER, fax 201-3484505 , e-mail orders@springer-ny ・ com, or visit http : //www.springer-ny ・ ( om. Outside the United States: fax + 49 6221 345229 , e-mail orders@springer.de, or visit http : //www.springer.de. For informatlon on translations, please contact Apress directly at 2855 Telegraph Avenue, sulte 600 , BerkeIey, CA 94705. Phone 510-549-5930 , fax 510-549-5939 , e-mail info@apress.com/ or visit http://www.apress.com/ The informatlon ⅲ this book is distributed on an 。 as is " basis, without warranty. Although every precaution has been taken ⅲ the preparation Of this work, neither the author(s) nor Apress shall have any liability to any person or entity with respect to any loss or damage caused or alleged to caused directly or indirectly by the informatlon contained ⅲ this work.